﻿//int longestMountain(int* arr, int arrSize) {
//    if (!arrSize) {
//        return 0;
//    }
//    int left[arrSize];
//    left[0] = 0;
//    for (int i = 1; i < arrSize; ++i) {
//        left[i] = (arr[i - 1] < arr[i] ? left[i - 1] + 1 : 0);
//    }
//    int right[arrSize];
//    right[arrSize - 1] = 0;
//    for (int i = arrSize - 2; i >= 0; --i) {
//        right[i] = (arr[i + 1] < arr[i] ? right[i + 1] + 1 : 0);
//    }
//    int ans = 0;
//    for (int i = 0; i < arrSize; ++i) {
//        if (left[i] > 0 && right[i] > 0) {
//            ans = fmax(ans, left[i] + right[i] + 1);
//        }
//    }
//    return ans;
//}

//void dfs(struct TreeNode* root, int* flag, int* last, int* f)
//{
//    if (root == NULL || *flag == 0)
//    {
//        return;
//    }
//    dfs(root->left, flag, last, f);
//    if (*f == 0)
//    {
//        *last = root->val;
//        (*f)++;
//    }
//    else
//    {
//        if (*last >= root->val)
//        {
//            *flag = 0;
//        }
//        else
//        {
//            *last = root->val;
//        }
//    }
//    dfs(root->right, flag, last, f);
//}
//bool isValidBST(struct TreeNode* root) {
//    int last = 0;
//    int flag = 1;
//    int f = 0;
//    int head = root->val;
//    dfs(root, &flag, &last, &f);
//    return flag == 1;
//}